#include <iostream>
#include "user.pb.h"
#include "mprpcapplication.h"

int main(int argc, char** argv)
{
    // 整个程序启动后，想使用mprpc框架来享受rpc服务调用
    // 一定要先调用框架的初始化函数，只初始化一次
    MprpcApplication::Init(argc, argv);

    // 调用远程发布的rpc方法Login
    Joy::UserServiceRpc_Stub stub(new MprpcChannel());
    // rpc方法的请求参数
    Joy::LoginRequest request;
    request.set_name("zhang san");
    request.set_pwd("123456");
    // rpc方法的响应
    Joy::LoginResponse response;

    // RpcChannel->callMethod 集中来做所有rpc方法调用的参数序列化和网络发送
    MprpcController controller;
    stub.Login(&controller, &request, &response, nullptr); 

    // 读取rpc方法的响应结果
    if(controller.Failed()) // rpc方法调用失败
    {
        std::cout << controller.ErrorText() << std::endl;
    }
    else
    {
        if(response.result().errcode() == 0)
        {
            std::cout << "rpc login response: " << response.success() << std::endl;
        }
        else
        {
            std::cout << "rpc login error: " << response.result().errmsg() << std::endl;
        }
    }


    // 调用远程发布的rpc方法Register
    // Joy::RegisterRequest req;
    // req.set_id(728);
    // req.set_name("Joy");
    // req.set_pwd("123456");
    // Joy::RegisterResponse resp;
    // stub.Register(nullptr, &req, &resp, nullptr);

    // // 读取rpc方法的响应结果
    // if(controller.Failed()) // rpc方法调用失败
    // {
    //     std::cout << controller.ErrorText() << std::endl;
    // }
    // else
    // {
    //     if(resp.result().errcode() == 0)
    //     {
    //         std::cout << "rpc register response: " << resp.success() << std::endl;
    //     }
    //     else
    //     {
    //         std::cout << "rpc register error: " << resp.result().errmsg() << std::endl;
    //     }
    // }

    return 0;
}